#ifndef VL_CMD__H_
#define VL_CMD__H_

#include <cstdio>
#include <cstdlib>
#include <string>
#include "vl_buffer.h"

namespace VL {

#if defined _WIN32 || defined _WIN64
	#define ARG_INDIACTOR "/"
	#define popen _popen
	#define pclose _pclose
#else
	#define ARG_INDIACTOR "-"
#endif

class CMDExecute {
public:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-02-17 18:38:11
	 * 
	 * 执行命令行指令
	 * 
	 * @param cmd 命令行指令
 	 * @param echo 是否显示回响
	 */
	static int execute(std::string cmd, bool echo = true);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-02-17 18:38:11
	 * 
	 * 执行命令行指令
	 * 
	 * @param cmd 命令行指令
	 * @param buffer 字节缓冲区
 	 * @param echo 是否显示回响
	 */
	static int execute(std::string cmd, Buffer* buffer, bool echo = true);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-11-22 22:04:28
	 * 
	 * 获取进程错误信息
	 * 
	 * @param retCode 进程返回码
	 * 
	 * @return 进程错误信息
	 */
	static std::string getErrorMessage(int retCode);

private:
	CMDExecute(std::string cmd);
	~CMDExecute();
};

}

#endif //VL_CMD__H_
